2023/12/233193字符

运算符

ECMA 6.1.6 运算符符号

算数运算符

  • + (1)数学运算、字符串链接 (2)任何数据类型加字符串都等于字符串
  • -*/%++-- 数学运算
var a = 1;
    b = a ++;
    c = a + b;
console.log(a, b, c);  //--> 2 1 3
var a = 1;
    b = ++ a;
    c = a + b;
console.log(a, b, c);  //--> 2 2 4
  • ()(1)数学运算 (2)函数调用

x % y y 必须是有限的和非零,否则返回 NaN ECMA 5.2.5

赋值运算符

  • =+=-=*=/=%=
a += b  //-->  a = a + b

比较运算符

  • <><=>=== (比较抽象的平等), !====

任何值都能比较,unicode 编码与 String 类型之间可以直接比较,参考 Unicode 编码 ECMA 5.1.2 (对于包含补充字符的字符串,UTF-16代码单元值序列的字典顺序与代码点值序列的字典顺序不同)

== 运算符比较执行过程 ECMA 7.2.15

var a = '10', b = 20;
a > b //--> false  Number(a) > b

'\u000A' === '\n';  //--> true

逻辑运算符

&&||!& 测定变量或值之间的逻辑

  • && 遇真得真 全真才为真,有一个假即为假
1 && false && 2;  //-->  1 //遇假则停
  • || 遇假得假 有一个真即为真
0 || false || 1;  //-->  1
  • & 一般不用 前后一致则为 1,不一致为 0(与二进制有关)
1 & 2;  //-->  0
1 & 1;  //-->  1
1 & 3;  //-->  1

三目运算符

  • ? :
3 > 9 ? console.log("yes") : console.log("no");  //--> no

运算符优先级

// .  []  ()                                     字段访问、数组下标、函数调用及表达式分组
// ++  --  -  ~  !  delete  new  typeof  void    一元运算符、对象创建、返回数据类型、未定义值
// *  /  %                                       乘法、除法、取模
// +  -                                          加法/字符串连接、减法
// <<  >>  >>>                                   位移
// <  <=  >  >=  instanceof                      小于、小于等于、大于、大于等于、instanceof 
// ==  !=  ===  !==                              等于、等于等于、严格等于、非严格等于
// &                                             按位与
// ^                                             按位异或
// |                                             按位或
// &&                                            逻辑与
// ||                                            逻辑或
// ?:                                            条件
// =  oP=                                        赋值、运算赋值
// ,                                             多重求值